package com.sys.users.dao.impl;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

import com.sys.common.dao.impl.BaseDaoImpl;
import com.sys.common.util.ConstatFinalUtil;
import com.sys.common.util.PageInfoUtil;
import com.sys.users.dao.ITCartDao;
import com.sys.users.pojo.TCart;

/**
 * 购物车表操作的Dao实现类
 * 
 * 已经确定此处子类使用的是肯定是Cart
 * 
 * @author 杨志超
 */
public class TCartDaoImpl extends BaseDaoImpl<TCart> implements ITCartDao
{
	private String tableName = "t_cart";
	private TCart cart = new TCart();

	@Override
	public int save(TCart cart)
	{
		/*------只关心SQL语句和条件-------*/
		/* 条件 */
		List<Object> paramsList = new ArrayList<Object>();
		/* sql语句 */
		StringBuffer sqlSb = new StringBuffer();
		sqlSb.append("insert into " + tableName);
		sqlSb.append(" (usersId,goodsId,num,status,createTime,updateTime,pubTime) ");
		sqlSb.append(" values ");
		sqlSb.append(" (?,?,?,?,?,?,?) ");
		/* 为?赋值 */
		paramsList.add(cart.getUsersId());
		paramsList.add(cart.getGoodsId());
		paramsList.add(cart.getNum());
		paramsList.add(cart.getStatus());
		paramsList.add(cart.getCreateTime());
		paramsList.add(cart.getUpdateTime());
		paramsList.add(cart.getPubTime());
		
		/* 打印调试信息 */
		ConstatFinalUtil.SYS_LOGGER.info("sql语句:{}",sqlSb.toString());
		ConstatFinalUtil.SYS_LOGGER.info("sql条件:{}",paramsList);
		/* 执行sql语句 */
		int res = this.executeSqlUpdate(sqlSb.toString(), paramsList);
		/*
		 * 主键才会放到List中 如何取到List中最后一个元素
		 */
		cart.setId((int) paramsList.get(paramsList.size() - 1));
		return res;
	}

	/**
	 * SQL语句和JDBC分离
	 * 
	 * @param cart
	 * @return
	 */
	@Override
	public int update(TCart cart)
	{
		/*------只关心SQL语句和条件-------*/
		/* 条件 */
		List<Object> paramsList = new ArrayList<Object>();
		/* sql语句 */
		StringBuffer sqlSb = new StringBuffer();
		sqlSb.append("update " + tableName + " set ");
		sqlSb.append(" usersId=?,goodsId=?,num=?,status=?,createTime=?,updateTime=?,pubTime=? ");
		sqlSb.append(" where id = ?");
		/* 为?赋值 */
		paramsList.add(cart.getUsersId());
		paramsList.add(cart.getGoodsId());
		paramsList.add(cart.getNum());
		paramsList.add(cart.getStatus());
		paramsList.add(cart.getCreateTime());
		paramsList.add(cart.getUpdateTime());
		paramsList.add(cart.getPubTime());
		paramsList.add(cart.getId());
		/* 打印调试信息 */
		ConstatFinalUtil.SYS_LOGGER.info("sql语句:{}",sqlSb.toString());
		ConstatFinalUtil.SYS_LOGGER.info("sql条件:{}",paramsList);
		/* 执行sql语句 */
		return this.executeSqlUpdate(sqlSb.toString(), paramsList);
	}

	@Override
	public int delete(Map<String, Object> condMap)
	{
		/*------只关心SQL语句和条件-------*/
		/* sql语句 */
		StringBuffer sqlSb = new StringBuffer();
		/* 条件 */
		List<Object> paramsList = new ArrayList<Object>();
		sqlSb.append("delete from " + tableName);
		if(condMap.get("id") != null && !"".equalsIgnoreCase(condMap.get("id") + ""))
		{
			/* 根据id作为条件 */
			sqlSb.append(" where id = ? ");
			paramsList.add(condMap.get("id"));
		}
		/* 打印调试信息 */
		ConstatFinalUtil.SYS_LOGGER.info("sql语句:{}",sqlSb.toString());
		ConstatFinalUtil.SYS_LOGGER.info("sql条件:{}",paramsList);
		return this.executeSqlUpdate(sqlSb.toString(), paramsList);
	}

	@Override
	public TCart findOne(Map<String, Object> condMap)
	{
		/*-----------拼装SQL语句和条件----------*/
		/*
		 * 存储条件 condMap:用户输入的搜索条件 paramsList:存储的是SQL语句的条件
		 */
		List<Object> paramsList = new ArrayList<Object>();
		/*
		 * SQL语句和条件 ?的位置和List的顺序一定要一致
		 */
		StringBuffer sqlSb = new StringBuffer();
		sqlSb.append("select * from " + tableName + " where 1 = 1 ");
		/* 根据id查询 */
		if (condMap.get("id") != null && !"".equalsIgnoreCase(condMap.get("id") + ""))
		{
			/* 根据id作为条件 */
			sqlSb.append(" and id = ? ");
			paramsList.add(condMap.get("id"));
		} 
		
		/* usersId */
		if (condMap.get("usersId") != null && !"".equalsIgnoreCase(condMap.get("usersId") + ""))
		{
			sqlSb.append(" and usersId = ? ");
			paramsList.add(condMap.get("usersId"));
		}
		
		/* goodsId */
		if (condMap.get("goodsId") != null && !"".equalsIgnoreCase(condMap.get("goodsId") + ""))
		{
			sqlSb.append(" and goodsId = ? ");
			paramsList.add(condMap.get("goodsId"));
		}
		ConstatFinalUtil.SYS_LOGGER.info("sql语句:{}",sqlSb.toString());
		ConstatFinalUtil.SYS_LOGGER.info("sql条件:{}",paramsList);

		return this.findOneBase(sqlSb.toString(), paramsList, new TCart());
	}

	/**
	 * 分页+搜索+列表
	 */
	@Override
	public List<TCart> findCondList(PageInfoUtil pageInfoUtil, Map<String, Object> condMap)
	{
		/*-----------拼装SQL语句和条件----------*/
		/*
		 * 存储条件 condMap:用户输入的搜索条件 paramsList:存储的是SQL语句的条件
		 */
		List<Object> paramsList = new ArrayList<Object>();
		/*
		 * SQL语句和条件 ?的位置和List的顺序一定要一致
		 */
		StringBuffer sqlSb = new StringBuffer();
		sqlSb.append("select * from " + tableName + " where 1 = 1 ");
		/* 关键字 */
		if (condMap.get("keyword") != null && !"".equalsIgnoreCase(condMap.get("keyword") + ""))
		{
			sqlSb.append(" and (content like ? or name like ?) ");
			/* 有几个?就放几个条件 */
			paramsList.add("%" + condMap.get("keyword") + "%");
			paramsList.add("%" + condMap.get("keyword") + "%");
		}

		/* 状态 */
		if (condMap.get("status") != null && !"".equalsIgnoreCase(condMap.get("status") + ""))
		{
			sqlSb.append(" and status = ? ");
			paramsList.add(condMap.get("status"));
		}
		
		/* usersId */
		if (condMap.get("usersId") != null && !"".equalsIgnoreCase(condMap.get("usersId") + ""))
		{
			sqlSb.append(" and usersId = ? ");
			paramsList.add(condMap.get("usersId"));
		}
		
		/* goodsId */
		if (condMap.get("goodsId") != null && !"".equalsIgnoreCase(condMap.get("goodsId") + ""))
		{
			sqlSb.append(" and goodsId = ? ");
			paramsList.add(condMap.get("goodsId"));
		}

		/*
		 * 时间范围 从map中取的值是Object,想判断一下,是不是Date对象 怎么判断A是不是B的一个对象呢(A是对象,B是类)
		 */
		if (condMap.get("stTime") instanceof Date && condMap.get("edTime") instanceof Date)
		{
			sqlSb.append(" and createTime > ? and createTime < ? ");
			paramsList.add(condMap.get("stTime"));
			paramsList.add(condMap.get("edTime"));
		}

		/* 默认都有orderby */
		if ("iddesc".equalsIgnoreCase(condMap.get("orderby") + ""))
		{
			sqlSb.append(" order by id desc ");
		} else if ("idasc".equalsIgnoreCase(condMap.get("orderby") + ""))
		{
			sqlSb.append(" order by id asc ");
		} else
		{
			sqlSb.append( " order by pubTime desc ");
		}
		ConstatFinalUtil.SYS_LOGGER.info("sql语句:{}",sqlSb.toString());
		ConstatFinalUtil.SYS_LOGGER.info("sql条件:{}",paramsList);
		/*
		 * ~分页查询 ~不分页查询 ~搜索查询
		 */
		if (pageInfoUtil != null)
		{
			/* 分页查询 */
			return this.findByPage(pageInfoUtil, sqlSb.toString(), paramsList, cart);
		}
		/* 不分页查询 */
		return this.find(sqlSb.toString(), paramsList, cart);
	}

}
